package com.fancy.music.service;

import com.fancy.common.dto.ArtistBasicInfo;
import com.fancy.common.dto.PageResult;
import com.fancy.music.dto.ArtistDetailDTO;
import com.fancy.music.entity.Artist;

import java.util.List;

public interface ArtistService {

    /**
     * 根据ID获取歌手详情
     */
    Artist getArtistDetail(Long artistId);

    /**
     * 根据ID获取歌手详情（包含统计信息）
     */
    ArtistDetailDTO getArtistDetailWithInfo(Long artistId);

    /**
     * 搜索歌手
     */
    PageResult<Artist> searchArtists(String keyword, String genre, String country, Integer gender, int page, int size);

    /**
     * 搜索歌手（包含详细信息）
     */
    PageResult<ArtistDetailDTO> searchArtistsWithDetails(String keyword, String genre, String country, Integer gender, int page, int size);

    /**
     * 获取热门歌手
     */
    List<Artist> getHotArtists(Integer limit);

    /**
     * 获取热门歌手（包含详细信息）
     */
    List<ArtistDetailDTO> getHotArtistsWithDetails(Integer limit);

    /**
     * 根据音乐风格获取歌手
     */
    List<Artist> getArtistsByGenre(String genre, Integer limit);

    /**
     * 根据音乐风格获取歌手（包含详细信息）
     */
    List<ArtistDetailDTO> getArtistsByGenreWithDetails(String genre, Integer limit);

    /**
     * 根据国家获取歌手
     */
    List<Artist> getArtistsByCountry(String country, Integer limit);

    /**
     * 根据国家获取歌手（包含详细信息）
     */
    List<ArtistDetailDTO> getArtistsByCountryWithDetails(String country, Integer limit);

    /**
     * 获取新人歌手
     */
    List<Artist> getNewArtists(Integer limit);

    /**
     * 获取新人歌手（包含详细信息）
     */
    List<ArtistDetailDTO> getNewArtistsWithDetails(Integer limit);

    /**
     * 获取歌手基本信息
     */
    ArtistBasicInfo getArtistBasicInfo(Long artistId);

    /**
     * 批量获取歌手基本信息
     */
    List<ArtistBasicInfo> getArtistBasicInfoBatch(List<Long> artistIds);

    /**
     * 创建歌手
     */
    Long createArtist(Artist artist);

    /**
     * 更新歌手信息
     */
    boolean updateArtist(Artist artist);

    /**
     * 删除歌手
     */
    boolean deleteArtist(Long artistId);

    /**
     * 启用/禁用歌手
     */
    boolean toggleArtistStatus(Long artistId, Integer status);

    /**
     * 获取所有歌手的音乐风格
     */
    List<String> getAllArtistGenres();

    /**
     * 根据音乐风格获取歌手（支持部分匹配）
     */
    List<Artist> getArtistsByGenreMatch(String genre, Integer limit);

    /**
     * 根据音乐风格获取歌手（包含详细信息，支持部分匹配）
     */
    List<ArtistDetailDTO> getArtistsByGenreMatchWithDetails(String genre, Integer limit);
}
